// 用于管理插件核心功能的 background.js

import { SyncService } from './service/syncService.js';

const syncService = new SyncService();

// 监听安装事件
chrome.runtime.onInstalled.addListener(() => {
	console.log('Bookmark Sync 插件已安装');
});

// 监听浏览器启动事件
chrome.runtime.onStartup.addListener(() => {
	console.log('Bookmark Sync 插件已启动');
	syncImpTimeout();
});


// 1. 创建事件：onCreated   ,当新书签或文件夹创建时触发。

chrome.bookmarks.onCreated.addListener((id, bookmark) => {
	change("created", id)
});
// 2. 删除事件：onRemoved  ,当书签或文件夹被删除时触发。

chrome.bookmarks.onRemoved.addListener((id, removeInfo) => {
	change("removed", id)
});
// 3. 更新事件：onChanged   ,当书签标题或 URL 修改时触发（文件夹修改不触发）。
chrome.bookmarks.onChanged.addListener((id, changeInfo) => {
	change("changed", id)
});
// 4. 移动事件：onMoved   ,当书签或文件夹在不同位置间移动时触发。

chrome.bookmarks.onMoved.addListener((id, moveInfo) => {
	change("moved", id)
});
// 5. 排序变更事件：onChildrenReordered   ,当文件夹内子项排序发生变化时触发（如用户拖拽调整顺序）。

chrome.bookmarks.onChildrenReordered.addListener((parentId, reorderInfo) => {
	change("reordered", null);
});
// 6. 导入完成事件：onImportEnded   ,当书签导入操作完成时触发（通常用于批量导入场景）。
chrome.bookmarks.onImportEnded.addListener(() => {
	// change("importEnded", null);
	// 会产生change 和 多个create 
});

async function change(type, id) {
	// 检查自动同步开关是否开启 
	const autoSync = await syncService.isautoSync();
	if (autoSync !== true) {
		console.log("自动同步已关闭，跳过同步操作");
		return;
	}

	syncExpTimeout(type, id)

}

async function syncExpTimeout(type, id) {
	setTimeout(async () => {
		syncService.loadStoredConfig();
		
		// 检查自动同步开关是否开启 
		const autoSync = await syncService.isautoSync();
		if (autoSync !== true) {
			console.log("自动同步已关闭，跳过同步操作");
			return;
		}
		
		if (type == "created" || type == "removed" || type == "moved") {
			if (await syncService.operationIsAuto(type, id) === true) {
				console.log("自动操作，忽略:type=" + type + ",id=" + id);
				return;
			}
		}
		console.log("change:type=" + type);
		syncService.exportBookmarksToRemote();
	}, 2000);
}

async function syncImpTimeout() {
	setTimeout(async () => {
		syncService.loadStoredConfig();
		
		// 检查自动同步开关是否开启 
		const autoSync = await syncService.isautoSync();
		if (autoSync !== true) {
			console.log("自动同步已关闭，跳过同步操作");
			return;
		}
		
		syncService.importBookmarksFromRemote();
	}, 2000);
}